import java.util.HashMap;
import java.util.Vector;

import processing.core.*;

public class SparkLines extends PApplet implements ResultReceptor {

  float a=0;
  Vector resultados;  
  static HashMap equipos;
  Gui gui;
  
  static public PFont font;
  
  Slider sliderFecha = new Slider(30,550,350,10,0,19);
  
  enum ProgramState {LOADING, SHOWING};
  ProgramState state = ProgramState.LOADING;
  String[][][] tablaPosiciones;
  int fecha = 0;
  ComboBox torneoSelector;
  Object[] eqs;
  FixtureAPI fixture;
  
  ThreadedLoader loader;
  public void setup() {
	    size(640,600);
	    background(255,255,255);  	
	    smooth();
    	
	    font = loadFont("TheSans-Plain-12.vlw"); 
	    textFont(font);
      	
	    resultados = new Vector();
    	
        fixture = new FixtureAPI();
        gui = new Gui(this);   
        gui.setup();
        
        equipos = fixture.getEquipos();

        loader = new ThreadedLoader(this);
        eqs = equipos.values().toArray();
        
		Torneo[] ts = fixture.getTorneos();
	       
    	torneoSelector = new ComboBox(Gui.parent, 20, 10, 2, 200, 20);
    	
		for(int i=0; i< ts.length; i++)
		{
			torneoSelector.Add(ts[i].nombre, ts[i].id);	
		}

        
        loadData(fixture, eqs);  
 }


private void loadData(FixtureAPI fixture, Object[] eqs) {
	tablaPosiciones = fixture.getTablaDePosiciones(1);
 
    resultados.clear();	
	for(int i=0; i<equipos.size();i++)
	{
	    Equipo s = (Equipo)eqs[i];
		loader.getResultado(torneoSelector.selectedOption.id,19,s.id);
	}
}


  public void mouseDragged(){

	  	sliderFecha.mouseDragged();
		fecha = (int)sliderFecha.current;
		for(int e=0; e<resultados.size(); e++)
		{
			SlotCartilla r = (SlotCartilla)resultados.get(e);
						
			for(int i=0; i<tablaPosiciones[fecha].length; i++)
			{
				if( Integer.parseInt(tablaPosiciones[fecha][i][0])==r.jugadoPor)
				{
					r.desidedY = 55+i*25;
					r.calculateResumen(fecha);
				}
			}
		}

  };

  public void mousePressed()
  {
	  torneoSelector.press(Gui.parent.mouseX, Gui.parent.mouseY);
  }
  
  public void draw() {
	  
	  	background(255,255,255);
		 int y=20;
		 
		  sliderFecha.draw();
		  sliderFecha.update();
		     Gui.parent.text("Fecha: "+(fecha+1), 30,580); 

		 
		 for(int i=0;i<resultados.size();i++)
		 {
			 SlotCartilla t = (SlotCartilla)resultados.get(i);
			 t.draw(fecha);
		 }
		 adjustSlots();
		 stroke(255);	

		 
		 if(Gui.parent.mousePressed)
		 {
			mouseDragged();
			torneoSelector.press(Gui.parent.mouseX, Gui.parent.mouseX);

		 }
	
		 torneoSelector.display();
		 
			if(torneoSelector.changed)
			{
				loadData(fixture, eqs);
				torneoSelector.changed=false;
			}
			
			
  }  
  

	@Override
	public void addResultado(SlotCartilla r) {
		r.calculateMaxHeight();
		r.calculateResumen(fecha);
		resultados.add(r);
		
		for(int i=0; i<tablaPosiciones[fecha].length; i++)
		{
			if( Integer.parseInt(tablaPosiciones[fecha][i][0])==r.jugadoPor)
			{
				r.desidedY= 55+i*25;
			}
		}
		
	}
	 
	public void adjustSlots()
	{
		SlotCartilla s;
		for(int i=0; i<resultados.size(); i++)
		{
			s = (SlotCartilla)resultados.get(i);
			s.y += (s.desidedY-s.y)/16;
			s.drawTooltip();
		}
	}
}
